package com.own.component.store.core.method.base;

import com.own.component.store.core.util.base.StoreKeyUtil;

import java.time.Duration;
import java.util.Set;

/**
 * BaseStoreMethod
 *
 * @author chenxueli
 * @date 2023-06-28 14:40:00
 */
public interface BaseStoreMethod {

    /**
     * 类型名称
     *
     * @return 类型名称
     */
    String type();

    /**
     * 是否存在值
     *
     * @param name 保存的name
     * @return 是否存在
     */
    boolean contains(String name);

    /**
     * 删除原子值
     *
     * @param name 保存的name
     */
    void remove(String name);

    /**
     * 设置超时时间
     *
     * @param key      key
     * @param duration 超时时间
     */
    default void expire(String key, Duration duration) {
        // todo nothing
    }

    /**
     * 创建新键
     *
     * @param key 旧键
     * @return 新键
     */
    default String buildKey(String key) {
        return StoreKeyUtil.buildKey(type(), key);
    }

    /**
     * 获取所有的key
     *
     * @return 所有的key
     */
    default Set<String> keySet() {
        return null;
    }

    /**
     * 匹配key
     *
     * @param pattern 匹配规则
     * @return keyList
     */
    Set<String> pattern(String pattern);

}
